home *** CD-ROM | disk | FTP | other *** search
/ F1 Licenseware / F1 Licenseware - Volume 1.iso / disks / 055a.dms / 055a.adf / READERS_SOURCE.LHA / READERS_SOURCE / A_CAMPBELL / AJC-GRETCH-GAME.AMOS / AJC-GRETCH-GAME.amosSourceCode next >
AMOS Source Code  |  1992-02-26  |  6KB  |  322 lines

  1. '
  2. '  "GRETCH" By Andrew Campbell 1994
  3. '
  4. '  INSTRUCTIONS: By using the joystick-controlled dot, guide 
  5. '  the bouncing balls into the flashing block. You have infinite 
  6. '  lives but not infinite hair - don't pull it too hard. 
  7. '
  8. '  Yes I know it's an excuse of a game but who cares?
  9. '  Just play it and stop moaning.  
  10. '
  11. '  Cheers - AJC
  12. '
  13.  
  14. Dim XP(50),YP(50),_DIR(50)
  15. Global LVL,LVS,SCORE
  16. Global XP(),YP(),_DIR()
  17.  
  18. REST:
  19. Gosub TSCREEN
  20. LVL=1 : LVS=5 : SCORE=0
  21.  
  22.  
  23. RESTART:
  24. Screen Open 0,320,256,8,Lowres : Curs Off : Flash Off : Hide On : Cls 0
  25. Default Palette 0,0,0,0,0,0,0,0
  26. Key Speed 10,1
  27. NUMBER_OF_BALLS=LVL
  28. Ink 2 : Box 0,0 To 319,199
  29. GEN_LEVEL
  30.  
  31.  
  32.  
  33. Repeat 
  34.    X=Rnd(310)+9 : Y=Rnd(190)+9
  35.    If Point(X,Y)=2 : Goto FINE : End If 
  36. Until DEATH=1
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43. FINE:
  44.  
  45. CEN=1 : SPEEDY=0 : DEAD=0 : WON=0 : SLOW=0 : QUIT=0
  46. _STARTX=0 : _STARTY=0 : _FINISHX=0 : _FINISHY=0
  47.  
  48. Auto View On : View 
  49. Fade 1,$0,$FFF,$F,$F0,$F,0,$FFF,0
  50. Flash 7,"(444,5)(555,5)(666,5)(777,5)(888,5)(999,5)(AAA,5)(BBB,5)(CCC,5)(BBB,5)(AAA,5)(999,5)(888,5)(777,5)(666,5)"
  51.  
  52.  
  53.  
  54.  
  55. GO_FOR_IT:
  56. Plot X,Y,1
  57. K$=""
  58.  
  59. Repeat 
  60.  
  61.    Update 
  62.  
  63.    K$=Inkey$
  64.    If K$>"" : QUIT=1 : End If 
  65.    Gosub MALIEN
  66.    
  67.    If SPEEDY=1
  68.       If DR=1 : Gosub GOIT : End If 
  69.       If DR=2 : Gosub GOIT : End If 
  70.       If DR=3 : Gosub GOIT : End If 
  71.       If DR=4 : Gosub GOIT : End If 
  72.       If Joy(1)<>-1
  73.          If Jup(1) : DR=1 : Gosub GOIT : End If 
  74.          If Jright(1) : DR=2 : Gosub GOIT : End If 
  75.          If Jdown(1) : DR=3 : Gosub GOIT : End If 
  76.          If Jleft(1) : DR=4 : Gosub GOIT : End If 
  77.       End If 
  78.    End If 
  79.    
  80.    If SPEEDY=0
  81.       If Jup(1) : DR=1 : Gosub GOIT : End If 
  82.       If Jright(1) : DR=2 : Gosub GOIT : End If 
  83.       If Jdown(1) : DR=3 : Gosub GOIT : End If 
  84.       If Jleft(1) : DR=4 : Gosub GOIT : End If 
  85.    End If 
  86.    
  87. Until DEAD=1 or WON=LVL or QUIT=1
  88.  
  89. If QUIT=1 : Goto REST : End If 
  90. If WON=LVL : Flash Off : Wait 30 : Fade 1,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF : Wait 30 : Inc LVL : End If 
  91. Goto RESTART
  92.  
  93.  
  94.  
  95.  
  96. GOIT:
  97. OX=X : OY=Y
  98. If DR=1 : Dec Y : End If 
  99. If DR=2 : Inc X : End If 
  100. If DR=3 and Y<199 : Inc Y : End If 
  101. If DR=4 : Dec X : End If 
  102. If SPEEDY=0 : Gosub CHECKPOINT : End If 
  103. If SPEEDY=1 : Gosub CHECKPOINT2 : End If 
  104. Return 
  105.  
  106.  
  107.  
  108.  
  109.  
  110. CHECKPOINT:
  111. C=Point(X,Y)
  112. If C=0
  113.    _STARTX=X : _STARTY=Y
  114.    SPEEDY=1
  115.    Return 
  116. Else If C<>2
  117.    X=OX : Y=OY
  118.    Return 
  119. Else 
  120.    Plot OX,OY,2
  121.    Plot X,Y,1
  122. End If 
  123. Return 
  124.  
  125.  
  126.  
  127.  
  128. CHECKPOINT2:
  129. C=Point(X,Y)
  130. If C=2
  131.    SPEEDY=0
  132.    _FINISHX=X : _FINISHY=Y
  133.    Gosub _FILL_IT_IN
  134.    Return 
  135. Else If C=1 or C=7
  136.    Sam Play 3
  137.    DEAD=1
  138.    Return 
  139. Else If C=0
  140.    Plot X,Y,1
  141. End If 
  142. Return 
  143.  
  144.  
  145.  
  146.  
  147. MALIEN:
  148. Inc CEN
  149. If CEN>NUMBER_OF_BALLS : CEN=1 : End If 
  150. If XP(CEN)=0 and YP(CEN)=0 and _DIR(CEN)=0 : Return : End If 
  151. Plot XP(CEN),YP(CEN),0
  152. If _DIR(CEN)=1 : Dec XP(CEN) : Dec YP(CEN) : End If 
  153. If _DIR(CEN)=2 : Inc XP(CEN) : Dec YP(CEN) : End If 
  154. If _DIR(CEN)=3 : Inc XP(CEN) : Inc YP(CEN) : End If 
  155. If _DIR(CEN)=4 : Dec XP(CEN) : Inc YP(CEN) : End If 
  156. Plot XP(CEN),YP(CEN),3
  157. Gosub REBOUND
  158. Return 
  159.  
  160.  
  161.  
  162.  
  163.  
  164. REBOUND:
  165.  
  166. C1=Point(XP(CEN),YP(CEN)-1)
  167. C2=Point(XP(CEN)+1,YP(CEN))
  168. C3=Point(XP(CEN),YP(CEN)+1)
  169. C4=Point(XP(CEN)-1,YP(CEN))
  170.  
  171. If C1=1 or C2=1 or C3=1 or C4=1 : DEAD=1 : Sam Play 3 : End If 
  172. If C1=7 or C2=7 or C3=7 or C4=7
  173.  Inc WON : Plot XP(CEN),YP(CEN),0 : XP(CEN)=0 : YP(CEN)=0 : _DIR(CEN)=0
  174.  A=$FFF : Palette A,A,A,A,A,A,A,A,A,A,A,A
  175.  Flash 7,"(444,5)(555,5)(666,5)(777,5)(888,5)(999,5)(AAA,5)(BBB,5)(CCC,5)(BBB,5)(AAA,5)(999,5)(888,5)(777,5)(666,5)"
  176.  Fade 1,$0,$FFF,$F,$F0,$F,0,$FFF,0
  177.  Sam Play 1
  178. End If 
  179.  
  180. If C4=2 and _DIR(CEN)=1 : _DIR(CEN)=2 : If SFX=1 : Sam Play 2 : End If : End If 
  181. If C4=2 and _DIR(CEN)=4 : _DIR(CEN)=3 : If SFX=1 : Sam Play 2 : End If : End If 
  182. If C2=2 and _DIR(CEN)=2 : _DIR(CEN)=1 : If SFX=1 : Sam Play 2 : End If : End If 
  183. If C2=2 and _DIR(CEN)=3 : _DIR(CEN)=4 : If SFX=1 : Sam Play 2 : End If : End If 
  184. If C1=2 and _DIR(CEN)=1 : _DIR(CEN)=4 : If SFX=1 : Sam Play 2 : End If : End If 
  185. If C1=2 and _DIR(CEN)=2 : _DIR(CEN)=3 : If SFX=1 : Sam Play 2 : End If : End If 
  186. If C3=2 and _DIR(CEN)=4 : _DIR(CEN)=1 : If SFX=1 : Sam Play 2 : End If : End If 
  187. If C3=2 and _DIR(CEN)=3 : _DIR(CEN)=2 : If SFX=1 : Sam Play 2 : End If : End If 
  188.  
  189. Return 
  190.  
  191.  
  192.  
  193. _FILL_IT_IN:
  194. PTX=0 : PTY=0
  195. Ink 2
  196. Paint _STARTX,_STARTY
  197. Plot X,Y,1
  198. Return 
  199.  
  200.  
  201.  
  202. TSCREEN:
  203.  
  204. SFX=0
  205.  
  206. Screen Open 0,320,256,8,Lowres : Curs Off : Flash Off : Hide On : Cls 0
  207. Default Palette 0,0,0,0,0,0,0,0
  208. Wait 30
  209. Key Speed 10,1
  210. Fade 1,$0,$FFF,$F,$F0,$F,0,$FFF,0
  211.  
  212. CEN=1
  213. Ink 2 : Box 0,0 To 319,199
  214. NUMBER_OF_BALLS=Rnd(10)+5
  215.  
  216. For I=1 To NUMBER_OF_BALLS
  217.  XP(I)=Rnd(300)+8 : YP(I)=Rnd(170)+8 : _DIR(I)=Rnd(3)+1
  218. Next I
  219.  
  220. Paper 0 : Pen 2
  221. Locate 0,8 : Centre "G R E T C H"
  222. Locate 0,12 : Centre "(c) 1994 Black Dragon Design"
  223. Locate 0,14 : Centre "PRESS FIRE TO PLAY"
  224.  
  225. K$=""
  226. Repeat 
  227.  K$=Inkey$
  228.  If K$<>"" : Fade 1 : Wait 15 : End : End If 
  229.  Gosub MALIEN
  230. Until Fire(1)
  231. SFX=1
  232.  
  233. Return 
  234.  
  235.  
  236.  
  237. '------------------
  238. Procedure GEN_LEVEL
  239.  
  240. Randomize Timer
  241.  
  242. If LVL=1
  243.  Ink 2
  244.  Bar 0,0 To 290,43
  245.  Bar 0,0 To 70,127
  246.  Bar 166,128 To 320,199
  247.  Bar 177,63 To 201,128
  248.  Bar 177,42 To 201,50
  249.  Ink 7
  250.  Bar 1,128 To 35,198
  251.  XP(1)=310
  252.  YP(1)=14
  253. End If 
  254.  
  255. If LVL=2
  256.  Ink 2
  257.  Bar 22,0 To 146,86
  258.  Bar 11,119 To 84,192
  259.  Bar 84,35 To 255,60
  260.  Bar 160,166 To 320,199
  261.  Bar 177,42 To 201,50
  262.  Ink 7
  263.  Bar 212,90 To 221,99
  264.  XP(1)=298 : XP(2)=5
  265.  YP(1)=14 : YP(2)=5
  266. End If 
  267.  
  268. If LVL=3
  269.  Ink 2
  270.  Circle 146,86,10 : Paint 146,86,2
  271.  Circle 84,192,7 : Paint 84,192,2
  272.  Circle 200,100,10 : Paint 200,100,2
  273.  Ink 7
  274.  Bar 155,110 To 165,120
  275.  XP(1)=2 : YP(1)=2
  276.  XP(2)=312 : YP(2)=2
  277.  XP(3)=200 : YP(3)=2
  278. End If 
  279.  
  280. If LVL=4
  281.  Ink 2
  282.  Circle 100,86,13 : Paint 100,86,2
  283.  Circle 284,192,7 : Paint 284,192,2
  284.  Bar 0,0 To 20,20 : Bar 300,0 To 320,20
  285.  Ink 7
  286.  Bar 315,195 To 319,199
  287.  XP(1)=42 : YP(1)=42
  288.  XP(2)=52 : YP(2)=52
  289.  XP(3)=62 : YP(3)=62
  290.  XP(4)=72 : YP(4)=72
  291. End If 
  292.  
  293. If LVL>4 and LVL<10
  294.  Ink 2
  295.  Bar 0,150-(LVL*5) To 50+(10*LVL),199 : Bar 300,0 To 320,20
  296.  Ink 7
  297.  Circle 160,100,11-LVL : Paint 160,100,7
  298.  For I=1 To LVL : XP(I)=10*I : YP(I)=10 : Next I
  299. End If 
  300.  
  301. If LVL>9
  302.  Ink 2
  303.  R1=Rnd(310)+5 : R2=Rnd(190)+5
  304.  Circle R1,R2,Rnd(LVL)-5 : Paint R1,R2,2
  305.  
  306.  Ink 7
  307.  R1=Rnd(310)+5 : R2=Rnd(190)+5
  308.  Ink 7 : Box R1,R2 To R1+10,R2+10
  309.  
  310.  For I=1 To LVL
  311.   REE:
  312.   R1=Rnd(310)+5 : R2=Rnd(190)+5
  313.   C=Point(R1,R2)
  314.   If C<>0 : Goto REE : End If 
  315.   XP(I)=R1 : YP(I)=R2
  316.  Next I
  317. End If 
  318.  
  319.  For I=1 To LVL : _DIR(I)=Rnd(3)+1 : Next I
  320.  
  321. End Proc
  322. '------------------